/**
 * 复制对象的所有属性到其它对象。 
 * @method extend
 * @param {Object} dest 复制目标。
 * @param {Object} obj 要复制的内容。
 * @return {Object} 复制后的对象。
 * <code>
 * var a = {v: 3}, b = {g: 2};
 * Object.extend().call(a,a,b);
 * a={v:3,g:2};
 * </code>
 */
function extend(){
	//IE bug
	for(var item in {toString: true})
		return apply;
	
	var members = ["toString", "hasOwnProperty"]
	return function(dest, src){
		for(var i = members.length, value; i--;)
			if(Object.prototype.hasOwnProperty.call(src, value = members[i]))
				dest[value] = src[value];
		return apply(dest, src);
	}
}
/**
 * 复制所有属性到任何对象。 
 * @param {Object} dest 复制目标。
 * @param {Object} src 要复制的内容。
 * @return {Object} 复制后的对象。
 */
function apply(dest, src) {
	for (var b in src)
		dest[b] = src[b];
	return dest;
}
/**
 * 可迭代对象遍历 
 * @param {Array/Object} 可迭代对象,不支持函数。
 * @param {Function} 参数 index(键),value(值)，iterable(可以遍历对象)。
 * @param {Object} 迭代的函数环境变量。
 * @return {Boolean} 是否遍历完所有的值。
 * <code>
 * each({a:1,b:2},function(v,k){
 *	alert(v+":"+k);
 * });
 * 输出结果 "a:1"  "b:2".
 * </code>
 */
function each(iterable,fn,bind){
	if(iterable!=null){
		
		var l=iterable.length,t
		if(typeof l==='undefined'){
			for(t in iterable){
				var self=typeof bind==='undefined'?iterable[t]:bind;
				if(fn.call(slef,iterable[t],t,iterable)===false){
					return false;
				}
			}
		}else{
			t=-1;
			while(++t<l){
				var self=typeof bind==='undefined'?iterable[t]:bind;
				if(fn.call(self,iterable[t],t,iterable)===false){
					return false;
				}
			}
		}
	}
	return true;
}
